扩充_ETHREAD结构
在某些场景下,我想要系统的某些结构跟我自己的数据进行绑定。如map<EPROCESS process,uint64_t DebugPort>。但是在某些情况下map+lock并不适用。我希望扩充系统的这些结构,在分配这些结构体的时候多分配一部分出来来达到绑定的目的。
翻阅一下wrk,找到相关的地方:
ETHREAD:
EPROCESS:
可以看到调用ObCreateObject传入对应的结构体大小,即分配了对应的内存。但是在WIN10下,这个地方有少许改变,win10下仍然有ObCreateObject,
但是成了ObCreateObjectEx的封装,系统分配结构体的地方也变成了:
可以看到ObCreateObjectEx比 ObCreateObject在后面多了一个参数:
多的这个参数,是在 ObCreateObjectEx调用ObpAllocateObject所使用
回到前面,我们HOOK ObCreateObjectEx 判断ObjectType,来修改ObjectBodySize来达到扩充的目的。
先定义需要扩充的结构和一个flag,表明该线程是否经过扩充,因为在我们处理过后的创建的线程才会有扩充。除此之外,我们还需要记录原始结构体的大小,以便我们到时候获取扩展的数据。
接着,我们HOOK ObCreateObjectEx,在HOOK里面判断类型,和记录原始大小。
然后调试一下:
可以看到_ethread在我系统中的大小是0x8e0,然后测试一下,系统创建线程,结束线程都是正常的。
我们启动一个进程,看下它的线程是否正确扩充了:
附录,我的系统版本:
看雪ID:xiaofu
bbs.pediy.com/user-99882
本文由看雪论坛 xiaofu 原创
转载请注明来自看雪社区
热门技术文章推荐